from PySide2 import QtWidgets

# 初始化测试类型
init_device = {'TestModel': None,  # 测试型号
               'BatchNo':None,     # 生产批号
               'small_statistics':None, #小批次数量
               'small_statistics_box':'PySide2.QtCore.Qt.CheckState.Checked', #小批次数量 验证开关
              'ScanDeviceID': None,  # 扫描设备ID
              'TestType': None}  # 测试类型 TypeCurrent\TypeVloage

# 初始化测试内容
test_parameter = {"SNLenSpinBox": 6,  # SN长度默认为6
                 "MaxData": 0,  # 测试最大值
                 "MinData": 0,  # 测试最小值
                 "VoltageDiffMax": 0,  # 电压差最大值
                 "VoltageDiffMin": 0,  # 电压差最小值
                 "SetDifTimeMax": 0,  # 要求静置时间上限
                 "SetDifTimeMin": 0,  # 要求静置时间下限
                 "SaveNGcheck": 'PySide2.QtCore.Qt.CheckState.Unchecked',  # 默认为不打勾
                 "TestType": None,  # 测试类型 电压\电流\电压差测试
                  "CurrentMax":0,
                  "CurrentMin":0}

# 测试结果统计，总数、OK数量、NG数量
result_statistics = {'test_number':0,
                     'ok_number':0,
                     'ng_number':0}

# 历史数据文件储存起始地址
fine_add = 'D:\古鑫自耗电测试数据\\'

# 电压差Excel 文件名字
excel_name = None

# UI界面的行、列、序列数量
row = 1
col = 1
number = None

# EXCEL文件的行、列号
excel_row = 4
excel_col = 1

# 进程
app = None

# 测试设备标识符
device_res = None

#汇总表地址&文件名
file_path = None

# SN汇总列表
sn_list = []

# excel中所有的SN列表
excel_sn_list = []

# 小批量-已经测试数量
small_number = 0

# 小批量-中转数
small_number_temp = 0

# 已配置测试参数标志位
set_flag = False

# 获取初始化测试类型
def get_init_device_value():
    global init_device
    return init_device

# 修改初始化测试类型内容
def change_init_device_value(_init_device):
    global init_device
    init_device = _init_device

# 获取初始化测试内容
def get_test_parameter_value():
    global  test_parameter
    return test_parameter

# 获取统计结果
def get_result_statistics_value():
    global result_statistics
    return result_statistics

# OK后，统计结果增加
def change_ok_result_statistics_value(ui):
    global init_device
    global sn_list
    global small_number
    global small_number_temp

    # 获取已经存入Excel的数量
    list_ok = len(sn_list)

    result_statistics['test_number'] +=1
    result_statistics['ok_number'] = list_ok
    ui.test_number.setText('已测数量：'+(str(result_statistics['test_number'])))
    ui.ok_number.setText('OK数量：'+(str(result_statistics['ok_number'])))

    small_statistics = get_small_statistics_value() #小批次设定数量
    small_statistics_box = get_small_statistics_box_value() # 获取验证开关参数

    small_number = result_statistics['ok_number'] - small_number_temp   #更新小批量数量

    # 验证开&达到了小批量数量,刷新界面
    if str(small_statistics_box) == 'PySide2.QtCore.Qt.CheckState.Checked'and\
       int(small_statistics) >= int(small_number):

        ui.small_statistics.setText('小批次数量：' + str(small_statistics) +':'+ str(small_number))
        # 小批量阶段完成，出提示框加清空数量
        if int(small_statistics) <= int(small_number):
            small_number_temp += int(small_statistics)

            ui.small_statistics.setText('小批次数量：' + str(small_statistics) + ':' + str(small_number))
            QtWidgets.QMessageBox.information(ui, '阶段完成', '# 小阶段已完成，确认并清点电池数量！ #')

# ng后，统计结果增加
def change_ng_result_statistics_value(ui):
    global result_statistics
    result_statistics['test_number'] +=1
    result_statistics['ng_number'] +=1
    ui.test_number.setText('已测数量：'+(str(result_statistics['test_number'])))
    ui.ng_number.setText('NG数量：'+(str(result_statistics['ng_number'])))

# 获取小批次数量
def get_small_statistics_value():
    global init_device
    return init_device['small_statistics']

# 更改小批次数量
def change_small_statistics_value(_small_statistics):
    global init_device
    init_device['small_statistics'] = _small_statistics

# 获取小批量验证开关
def get_small_statistics_box_value():
    global init_device
    return init_device['small_statistics_box']

# 获取历史数据文件储存起始地址
def get_fine_add_value():
    global fine_add
    return fine_add

# 获取进程
def get_app_value():
    global app
    return app

# 更改进程
def change_app_value(app_temp):
    global app
    app = app_temp

# 获取excel文件名
def get_excel_name_value():
    global excel_name
    return excel_name

# 修改excel文件名
def change_excel_name_value(fine_name):
    global excel_name
    excel_name = fine_name

# 获取UI行数
def get_row_value():
    global row
    return row

# 修改UI行数
def change_row_value(_row):
    global row
    row = _row

# 获取UI列数
def get_col_value():
    global col
    return col

# 修改UI列数
def change_col_value(_col):
    global col
    col = _col

# 获取当前excel行数
def get_excel_row_value():
    global excel_row
    return excel_row

# 修改当前excel行数
def change_excel_row_value(_excel_row):
    global excel_row
    excel_row = _excel_row

# 获取当前excel列数
def get_excel_col_value():
    global excel_col
    return excel_col

# 修改当前excel列数
def change_excel_col_value(_excel_col):
    global excel_col
    excel_col = _excel_col

# 获取序列号
def get_number_value():
    global number
    return number

# 修改序列号
def change_number_value(_number):
    global number
    number = _number

# 获取设备标识符
def get_device_res_value():
    global device_res
    return device_res

# 更改设备标识符
def change_device_res_value(_res):
    global device_res
    device_res = _res

# 获取汇总表地址&文件名
def get_file_path_value():
    global file_path
    return file_path

# 修改汇总表地址&文件名
def change_file_path_value(_file_path):
    global file_path
    file_path = _file_path

# 获取所有sn列表
def get_sn_list_value():
    global sn_list
    return sn_list

# 在列表后面添加SN号
def sn_list_append_value(_sn_list):
    global sn_list
    sn_list.append(_sn_list)

# UI和EXCEL坐标重新置位
def reset_ui_excel_coordinate():

    temp = get_row_value()
    change_row_value(temp + 1)  # UI新增一行
    change_col_value(0)  # UI列复位

    temp = get_excel_row_value()
    change_excel_row_value(temp + 1) #EXCEL新增一行
    change_excel_col_value(1)  # EXCEL列复位

# UI坐标重新置位
def reset_ui_coordinate():

    temp = get_row_value()
    change_row_value(temp + 1)  # UI新增一行
    change_col_value(0)  # UI列复位

    # 创建表后UI、EXCEL行、列、序列号复位

# 重置UI和Excel坐标
def recovery_ui_excel():

    change_row_value(0)
    change_col_value(0)
    change_number_value(0)

    change_excel_col_value(1)
    change_excel_row_value(4)

# 设置UI表格列宽
def ui_col_size_set(ui):
    ui.TestData.setColumnWidth(0, 200) #序列号
    ui.TestData.setColumnWidth(1, 100) #前电压
    ui.TestData.setColumnWidth(2, 100) #后电压
    ui.TestData.setColumnWidth(3, 145) #压差值
    ui.TestData.setColumnWidth(4, 130) #压差结果
    ui.TestData.setColumnWidth(5, 145) #前电压时间
    ui.TestData.setColumnWidth(6, 145) #后电压时间
    ui.TestData.setColumnWidth(7, 165) #已静置时间
    ui.TestData.setColumnWidth(8, 150) #设备编号检查

# 获取已配置测试参数标志位 （默认为配置）
def get_set_flag_value():
    global set_flag
    return set_flag

# 置位已配置测试参数标志位
def change_set_flag_value(_set_flag):
    global set_flag
    set_flag = _set_flag

# 获取excel中所有的SN号，并输出成列表
def get_excel_sn_list_value():
    global excel_sn_list
    return excel_sn_list

# 更改excel中所有的SN号，并输出成列表
def change_excel_sn_list_value(_excel_sn_list):
    global excel_sn_list
    excel_sn_list = _excel_sn_list
